OCaml Domains
Domains are heavy-weight entities. Each domain maps 1:1 to an operating system thread.
なので大量には起動できない
これでもGOMAXPROCS=128に相当するのでかなり多い気がする
Domain を複数起動してタスクをスケジューリングする機能がある
goroutine のスケジューラは長時間止まっているスレッドを見つけたらそのスレッドごと切り離して寝かせてるがたぶん今のプリミティブでは不可能なんではないか? Go と同じことをやるには Domain にシグナルハンドラが必要らしい Domainslib の API は良くできているので,非同期IO プログラミングでも使いたいところだが,この性質で困る
Rust の Futures のようにwakerを登録して一時停止みたいなことができるといいのではないか? Task.yield pool (fun wake -> register_waker wake)みたいな
こうすればスケジューラが非同期IO の都合を知らずとも非同期に色々を動かせる
select に相当する機能が無いのも困る
Eio.Fiber
Mutex ,Condition,Semaphore や Atomic などのモジュールで同期ができる
いいね
C のコードも並列に動作することを考慮しないといけない
ジャイアントロックはもはや存在しないため